經過第一個階段的努力,終於完成了初步的系統,我們要準備將系統部署到網路環境之中。
本次教學會將服務部署在 https://www.pythonanywhere.com/ ,這個平台可以讓我們架設免費的小網站。
我們已經完成第一階段的需求設計與功能開發,但是開發環境要部署到到正式環境(或是生產環境)會有很多需要考慮的事情。
設置生產環境
requirements.txt
這個檔案中。
requirements.txt
中沒有註記版本,因此生產環境上安裝了套件的更新版,因此造成毀滅性的錯誤。程式碼部署
本地端更新程式碼後,如何更新至生產環境中,以下介紹幾種方法。
手動更新程式碼(這篇文章的方法)
最簡單的概念就是,登入到生產環境的主機中,並用git或是檔案傳輸等方式將程式碼更新上去。
自動化更新程式碼
因為手動上傳檔案,容易少檔案或出現意料之外的錯誤(畢竟我們是人類),因此可以將更新程式碼的步驟標準化(最簡單的方式就是紀錄在一個bash檔案),並讓電腦自動執行即可。
CI/CD
容器化部署
一句話說明容器:容器就像是貨櫃一樣,將貨物裝貨櫃在裡面,貨物就可以跟著貨櫃到世界各地,容易被移動與搬運。
容器就是將運行環境與程式碼一起打包,因此容易移植到各式機器上執行。
我們日後也會再詳細介紹。
靜態檔案與資料庫管理
上傳至生產環境後,根據使用者的數量,會重新考量檔案存取與資料庫設計等問題,下述一些基本入門的方法,減少管理負擔。
資訊安全
以下列出幾項基礎中的基礎
#本日成果
下方會說明如何將服務部署在 https://www.pythonanywhere.com/ ,這個平台可以讓我們架設免費的小網站。
Django 也有部署指南,提醒開發者要注意的事項,細目非常的多,因為使用了pythonanywhere,我們可以省下許多心力設定網路伺服器、檔案路徑等等,若要部署在正式的VM上可以參考官方文件。
註冊教學可以參考 https://djangogirlstaipei.gitbooks.io/django-girls-taipei-tutorial/content/django/deploy.html
注意這裡填入的username
會是我們建立服務的前綴字喔。
點選右邊Web Apps 可以直接建立一個新的網站服務。
接著可以看到有許多開發環境可以讓我們選擇,因為筆者使用的是python3.9 Django 3.2,剛好沒有符合的選項,因此我們選用Manual Configuration
手動設定,讓我們自行安裝虛擬環境與安裝套件。
新增完後可以看到許多的設定欄位,等等會一一填上。
平台提供我們一個資料夾,且可以使用終端機來打指令,因此我們可以直接使用 git 指令來下載程式。之後程式碼更新,也可以進來使用git 更新程式碼即可
在Dashboard
,點選右邊Console→$Bash
,會開啟一個終端機介面,並打入下方指令。
```bash
git clone https://github.com/yen900611/TNFood_DJ.git
```
上傳後,可以在Dashboard→Files
看到我們的專案檔案
在終端機中使用指令安裝虛擬環境,並安裝requirements.txt
的套件
cd ./TNFood_DJ
python3.9 -m virtualenv ./venv
python -m pip install -r requirements.txt
source ./venv/bin/activate
回到 WebApp 可以看到有許多設定檔。
點選 /var/www/tnfood_pythonanywhere_com_wsgi.py
即可開啟編輯模式。這個檔案是平台要幫我們建立服務的設定檔,預設的內容中已經有Django
Flask
兩大網頁框架的設定方式。
mysite/settings.py
位置# +++++++++++ DJANGO +++++++++++
# To use your own django app use code like this:
import os
import sys
#
## assuming your django settings file is at '/home/TNFood/mysite/mysite/settings.py'
## and your manage.py is is at '/home/TNFood/mysite/manage.py'
path = '/home/TNFood/TNFood_DJ/mysite'
if path not in sys.path:
sys.path.append(path)
#
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
#
## then:
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
設定程式碼、虛擬環境
需要在這裡設定好我們程式碼的位置、虛擬環境的位置,平台也很貼心,會判斷此路徑是否有效。
做任何的改變後,需要點選 Reload 才可以套用新的程式碼或設定ㄘ
正常來說上述完成後,網址就可以導向我們的網站了,
但是!! 第一次總是不會那麼順利的,讓我們從錯誤中學習吧
出現錯誤→修改HOST
這是因為我們已經有正式的網域,不是本地的開發環境了,需要在settings.py
需要設定 ALLOWED_HOSTS
,否則會有很多安全性問題。
沒有資料→重新設定資料庫
這是因為我們部署到新環境,需要在新環境重新建立一次資料庫,也會需要重新建立使用者和新增餐廳的資料。(若是有好的備份機制,就可以更加容易完成這個步驟,之後再介紹了)
python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic
進入admin 發現畫面驟變→設定static file folder
沒有出現熟悉的管理介面是因為靜態檔案設定的問題,通常要注意settings.py
中 STATIC_URL
STATIC_ROOT
這兩個變數
# mysite/settings.py 最後記得補上這段
import mimetypes
mimetypes.add_type("text/css", ".css", True)
也要注意python manage.py collectstatic
這個指令產生的靜態檔位置。
平台則是很好心可以讓我們設定靜態檔案,在WebApp 頁面下方,輸入正確的資料夾位置即可。
恢復正常
部署的工作相當瑣碎,所幸是大部分都是一次性的工作,之後只需要更新程式碼或是資料庫的資料即可。
這次的部署是最簡易的部署,所謂先求有再就好,還有一些設定的議題之後會陸續補上。
到這邊第一階段就告一段落,接下來會有下個階段的需求和開發,請大家敬請期待。
台南不需要米其林
- 專案程式碼
- 專案文件與鐵人賽文章
- 參賽團隊 台南巷弄美食獵人